import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { ConfigService } from './config.service';
import { Config } from '../../entities/config.entity';
import { Admin } from '../../common/decorators/admin.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiBody, ApiParam } from '@nestjs/swagger';

@ApiTags('配置管理')
@Controller('api/admin/config')
export class ConfigAdminController {
  constructor(private readonly configService: ConfigService) {}

  // 获取所有配置（管理员权限）
  @Admin()
  @Get()
  @ApiOperation({
    summary: '获取所有配置',
    description: '管理员获取系统中所有配置项',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Config],
  })
  @ApiResponse({
    status: 403,
    description: '权限不足，需要管理员权限',
  })
  findAll() {
    return this.configService.findAll();
  }

  // 创建或更新配置（管理员权限）
  @Admin()
  @Post()
  @ApiOperation({
    summary: '创建或更新配置',
    description: '创建新配置或更新现有配置，需要管理员权限',
  })
  @ApiBody({
    schema: {
      example: {
        key: 'site_title',
        value: '我的博客',
        description: '网站标题',
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '操作成功',
    type: Config,
  })
  @ApiResponse({
    status: 403,
    description: '权限不足，需要管理员权限',
  })
  createOrUpdate(@Body() configData: { key: string; value: any; description?: string }) {
    return this.configService.createOrUpdate(
      configData.key,
      configData.value,
      configData.description,
    );
  }

  // 更新配置（管理员权限）
  @Admin()
  @Patch(':key')
  @ApiOperation({
    summary: '更新配置',
    description: '更新指定键的配置值，需要管理员权限',
  })
  @ApiParam({
    name: 'key',
    description: '配置键名',
    example: 'site_title',
  })
  @ApiBody({
    schema: {
      example: {
        value: '新的博客标题',
        description: '更新后的网站标题',
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
    type: Config,
  })
  @ApiResponse({
    status: 403,
    description: '权限不足，需要管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '配置不存在',
  })
  update(
    @Param('key') key: string,
    @Body() configData: { value: any; description?: string },
  ) {
    return this.configService.createOrUpdate(key, configData.value, configData.description);
  }

  // 删除配置（管理员权限）
  @Admin()
  @Delete(':key')
  @ApiOperation({
    summary: '删除配置',
    description: '删除指定键的配置，需要管理员权限',
  })
  @ApiParam({
    name: 'key',
    description: '配置键名',
    example: 'site_title',
  })
  @ApiResponse({
    status: 200,
    description: '删除成功',
  })
  @ApiResponse({
    status: 403,
    description: '权限不足，需要管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '配置不存在',
  })
  remove(@Param('key') key: string) {
    return this.configService.remove(key);
  }
}